home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Carnage_Contest / scripts / CC Original / weapons / Bin Laden.lua < prev    next >
Text File  |  2010-09-22  |  7KB  |  193 lines

  1. --------------------------------------------------------------------------------
  2. -- Weapon Bin Laden + Projectile Bin Laden
  3. -- Original Carnage Contest Weapon
  4. -- Script by DC, March 2010, www.UnrealSoftware.de
  5. --------------------------------------------------------------------------------
  6.  
  7. -- Setup Tables
  8. if cc==nil then cc={} end
  9. cc.binladen={}
  10. cc.binladen.binladen={}
  11.  
  12. -- Load & Prepare Ressources
  13. cc.binladen.gfx_wpn0=loadgfx("weapons/binladen0.bmp")                -- Weapon Image Frame 0
  14. setmidhandle(cc.binladen.gfx_wpn0)
  15. cc.binladen.gfx_wpn1=loadgfx("weapons/binladen1.bmp")                -- Weapon Image Frame 1
  16. setmidhandle(cc.binladen.gfx_wpn1)
  17. cc.binladen.sfx_attack=loadsfx("binladen.ogg")                        -- Attack Sound Loop
  18. cc.binladen.sfx_laugh=loadsfx("osamalaugh.ogg")                        -- Laugh Sound
  19.  
  20. --------------------------------------------------------------------------------
  21. -- Weapon: Bin Laden
  22. --------------------------------------------------------------------------------
  23.  
  24. cc.binladen.id=addweapon("cc.binladen","Osama bin Laden",cc.binladen.gfx_wpn0,0,2)        -- Add Weapon (0 uses, first in round 2)
  25.  
  26. function cc.binladen.draw()                                                -- Draw
  27.     -- Draw
  28.     if weapon_shots<=0 then
  29.         -- Info
  30.         hudinfo("Hit [Space] once to launch Osama bin Laden!")
  31.         if getplayeraction(0)==0 then
  32.             setblend(blend_alpha)
  33.             setalpha(1)
  34.             setcolor(255,255,255)
  35.             setscale(getplayerdirection(0),1)
  36.             setrotation(-(20+math.sin(os.clock()*15)*5)*getplayerdirection(0))
  37.             drawimage(cc.binladen.gfx_wpn0,getplayerx(0)+getplayerdirection(0)*7,getplayery(0)-5)
  38.         end
  39.     end
  40. end
  41.  
  42. function cc.binladen.attack(attack)                                    -- Attack
  43.     if (weapon_shots<=0) then
  44.         -- Fire a projectile (on release/full charge)
  45.         if (attack==1) then
  46.             -- No more weapon switching!
  47.             useweapon(0)
  48.             -- No more player control!
  49.             playercontrol(0)
  50.             -- Set Round Time (15 sec)
  51.             secondsleft=math.floor(getframesleft()/50)
  52.             changeturntime(15-secondsleft)
  53.             -- Launch
  54.             weapon_shots=weapon_shots+1
  55.             id=createprojectile(cc.binladen.binladen.id)
  56.             projectiles[id]={}
  57.             -- Ignore collision with current player at beginning
  58.             projectiles[id].ignore=playercurrent()
  59.             -- Set initial position of projectile
  60.             projectiles[id].x=getplayerx(0)+getplayerdirection(0)*8
  61.             projectiles[id].y=getplayery(0)-3
  62.             if collision(colplayer,projectiles[id].x,projectiles[id].y)==1 then
  63.                 if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  64.                     projectiles[id].x=getplayerx(0)
  65.                 end
  66.             end
  67.             -- Set Speeds
  68.             projectiles[id].sy=0
  69.             -- Set direction of projectile
  70.             projectiles[id].dir=getplayerdirection(0)
  71.             -- Animation
  72.             projectiles[id].frame=0
  73.             projectiles[id].timer=0
  74.             -- Timer
  75.             weapon_timer=50
  76.             -- Laugh
  77.             playsound(cc.binladen.sfx_laugh)
  78.         end
  79.     end
  80. end
  81.  
  82. --------------------------------------------------------------------------------
  83. -- Projectile: Bin Laden
  84. --------------------------------------------------------------------------------
  85.  
  86. cc.binladen.binladen.id=addprojectile("cc.binladen.binladen")        -- Add Projectile
  87.  
  88. function cc.binladen.binladen.draw(id)                                -- Draw
  89.     -- Setup draw mode
  90.     setblend(blend_alpha)
  91.     setalpha(1)
  92.     setcolor(255,255,255)
  93.     setscale(projectiles[id].dir,1)
  94.     -- Sound
  95.     if channelplaying(0)==0 then playsound(cc.binladen.sfx_attack,0) end
  96.     -- Draw projectile
  97.     if projectiles[id].frame==0 then
  98.         drawimage(cc.binladen.gfx_wpn0,projectiles[id].x,projectiles[id].y-2)
  99.     else
  100.         drawimage(cc.binladen.gfx_wpn1,projectiles[id].x,projectiles[id].y-2)
  101.     end
  102.     -- Draw Arrow if out of Screen
  103.     outofscreenarrow(projectiles[id].x,projectiles[id].y)
  104.     -- Info
  105.     hudinfo("Hit [Space] again to detonate Osama bin Laden!")
  106. end
  107.  
  108. function cc.binladen.binladen.update(id)                            -- Update
  109.     -- Timer
  110.     weapon_timer=weapon_timer-1
  111.     -- Animation
  112.     if collision(colplayer,projectiles[id].x,projectiles[id].y+4)==1 then
  113.         projectiles[id].timer=projectiles[id].timer+1
  114.         if projectiles[id].timer>8 then
  115.             projectiles[id].timer=0
  116.             projectiles[id].frame=1-projectiles[id].frame
  117.         end
  118.     else
  119.         projectiles[id].timer=6
  120.         projectiles[id].frame=1
  121.     end
  122.     -- Move Left/Right
  123.     projectiles[id].x=projectiles[id].x+projectiles[id].dir*0.5
  124.     if collision(colplayer,projectiles[id].x,projectiles[id].y)==1 then
  125.         if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  126.             -- Upwards/Downwards space?
  127.             doturn=1
  128.             for i=1,6,1 do
  129.                 if (i%2)==1 then offset=(i+1)/2 else offset=-(i/2) end
  130.                 if collision(colplayer,projectiles[id].x,projectiles[id].y+offset)==0 then
  131.                     doturn=0; projectiles[id].ignore=0 projectiles[id].y=projectiles[id].y+offset; break
  132.                 elseif terraincollision()==0 and objectcollision()==0 and playercollision()==projectiles[id].ignore then
  133.                     doturn=0; projectiles[id].y=projectiles[id].y+offset; break
  134.                 end
  135.             end
  136.             if doturn==1 then
  137.                 -- Move Back / Turn
  138.                 projectiles[id].x=projectiles[id].x-projectiles[id].dir*0.5
  139.                 projectiles[id].dir=projectiles[id].dir*(-1)
  140.             end
  141.         end
  142.     else
  143.         projectiles[id].ignore=0
  144.     end
  145.     -- Fall Down
  146.     projectiles[id].sy=projectiles[id].sy+getgravity()
  147.     msubt=math.ceil(math.abs(projectiles[id].sy)/3)
  148.     msuby=projectiles[id].sy/msubt
  149.     for i=1,msubt,1 do
  150.         projectiles[id].y=projectiles[id].y+msuby
  151.         -- Collision
  152.         if collision(colplayer,projectiles[id].x,projectiles[id].y)==1 then
  153.             if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  154.                 projectiles[id].sy=0
  155.                 projectiles[id].y=projectiles[id].y-msuby
  156.                 break
  157.             end
  158.         else
  159.             projectiles[id].ignore=0
  160.         end
  161.         -- Water
  162.         if (projectiles[id].y)>getwatery()-30 then
  163.             stopchannel(0)
  164.             -- Effects
  165.             particle(p_waterhit,projectiles[id].x,projectiles[id].y)
  166.             playsound(sfx_hitwater3)
  167.             -- Free projectile
  168.             freeprojectile(id)
  169.             -- End Turn
  170.             endturn()
  171.             return
  172.         end
  173.     end
  174.     -- Timer / Explode
  175.     if getframesleft()<5 or (weapon_timer<=0 and keydown(key_attack)==1) then
  176.         stopchannel(0)
  177.         -- Splatter
  178.         playsound(sfx_splatter2)
  179.         -- Cause damage
  180.         arealdamage(projectiles[id].x,projectiles[id].y,200,100)
  181.         -- Destroy terrain
  182.         terrainexplosion(projectiles[id].x,projectiles[id].y,90,1)
  183.         -- Crater
  184.         grey=math.random(0,40)
  185.         terrainalphaimage(gfx_crater200,projectiles[id].x,projectiles[id].y,math.random(6,9)*0.1,grey,grey,grey)
  186.         -- Free projectile
  187.         freeprojectile(id)
  188.         -- End Turn
  189.         endturn()
  190.     end
  191.     -- Scroll to projectile
  192.     scroll(projectiles[id].x,projectiles[id].y)
  193. end